package com.cuvretool.view.coordinate.workspace;

import java.util.ArrayList;

import com.cuvretool.utils.Vector2;
import com.cuvretool.view.coordinate.GridDrawInfo;
import com.cuvretool.view.coordinate.Transform;
/**
 * WorkSpace绘制区域网格和标尺坐标相关转换
 * since 2015年2月17日 上午12:24:59
 * @author boy
 */
public class TransformWorkSpace extends Transform {

	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================
	/**网格绘制需要的参数*/
	protected GridDrawInfo mGridDrawInfo = null;
	/**屏幕绘制坐标*/
	public ArrayList<Vector2> mPostionsDisplayX,mPostionsDisplayY;
	/**逻辑绘制坐标*/
	public ArrayList<Vector2> mPostionsDrawX,mPostionsDrawY;
	/**曲线点集*/
	public ArrayList<Vector2> mPostionCurve;
	// ===========================================================
	// Constructors
	// ===========================================================
	public TransformWorkSpace(){
		mPostionsDisplayX = new ArrayList<Vector2>();
		mPostionsDisplayY = new ArrayList<Vector2>();
		mPostionsDrawX = new ArrayList<Vector2>();
		mPostionsDrawY = new ArrayList<Vector2>();
		mPostionCurve = new ArrayList<Vector2>();
	}
	// ===========================================================
	// Getter & Setter
	// ===========================================================
	/**
	 * 设置网格绘制需求的info结构
	 * @param gridInfo
	 */
	public void setGridDrawInfo(GridDrawInfo gridDrawInfo) {
		mGridDrawInfo = gridDrawInfo;
		if(mGridDrawInfo != null){
			setDrawSize(mGridDrawInfo.mTotalX, mGridDrawInfo.mTotalY);
		} else {
			new Throwable("Please check GridInfo: GridDrawInfo is null");
		}
	}
	/**
	 * 网格绘制需求的info结构
	 */
	public GridDrawInfo getGridDrawInfo(){
		return mGridDrawInfo;
	}
	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================
	@Override
	public boolean TransformDisplayToDraw() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean TransformDrawToDisplay() {
		if(mGridDrawInfo == null) return false;
		
		mGridDrawInfo.run();
		mPostionsDisplayX.clear();
		mPostionsDisplayY.clear();
		ArrayList<Vector2> temp = mGridDrawInfo.getPostionX();
		for (int i = 0; i < temp.size(); i++) {
			mPostionsDisplayX.add(new Vector2(temp.get(i).x,mDisplayHeight-mGridDrawInfo.mBeginY));
			mPostionsDisplayX.add(new Vector2(temp.get(i).x,mDisplayHeight-temp.get(i).y));
		}
		
		temp = mGridDrawInfo.getPostionY();
		for (int i = 0; i < temp.size(); i++) {
			mPostionsDisplayY.add(new Vector2(mGridDrawInfo.mBeginX,mDisplayHeight-temp.get(i).y));
			mPostionsDisplayY.add(new Vector2(temp.get(i).x,mDisplayHeight-temp.get(i).y));
		}
		return true;
	}
	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}
